package com.example.design.observer;

/**
 * @author hej
 * @date 2022/11/4 16:25
 */
public class Client {
    /**
     * 抽象主题(Subject）角色：主题角色把所有对观察者对象的引用保存在一个集合（比如 Vector对象）里，每个主题都可以有任何数量的观察者。抽象主题提供一个接口，可以增加和删除观察者对象，主题角色又叫做抽象被观察者( Observable）角色，一般用一个抽象类或者一个接口实现。
     * 具体主题(ConcreteSubject）角色：将有关状态存入具体观察者对象;在具体主题的内部状态改变时，给所有登记过的观察者发出通知。具体主题角色又叫作具体被观察者角色(Concrete Observable)。具体主题角色通常用一个具体子类实现；具体主题角色负责实现对观察者引用的聚集的管理方法。
     * 抽象观察者（(Observer）角色：为所有的具体观察者定义一个接口，在得到主题的通知时更新自己。这个接口叫做更新接口。抽象观察者角色一般用一个抽象类或者一个接口实现。
     * 具体观察者( ConcreteObserver）角色：存储与主题的状态自恰的状态。具体观察者角色实现抽象观察者角色所要求的更新接口，以便使本身的状态与主题的状态相协调。如果需要，具体观察者角色可以保存一个指向具体主题对象的引用。具体观察者角色通常用一个具体子类实现。
     * @param args
     */
    public static void main(String[] args) {
        WeatherData weatherData = new WeatherData();
        // 注册到具体观察者上
        weatherData.registerObserver(new CurrentConditions());
        weatherData.registerObserver(new BaiduCurrentConditions());
        weatherData.registerObserver(new AliCurrentConditions());
        weatherData.setWeatherData(10.11f,100.22f,30.33f);

    }
}
